{"version":3,"file":"index.mjs","names":["#options","#incrementElId","#h"],"sources":["../src/helpers.ts","../src/ReactParser.ts","../src/ReactRenderer.ts","../src/Markdown.ts","../src/index.ts"],"sourcesContent":["import { decode } from 'html-entities';\n\nexport const unescape = (str = '') => {\n  if (!str || !str.includes('&')) {\n    return str;\n  }\n\n  return decode(str);\n};\n\nexport const joinBase = (path: string, base?: string) => {\n  if (!base) {\n    return path;\n  }\n\n  try {\n    return new URL(path, base).href;\n  } catch {\n    return path;\n  }\n};\n","import { ReactNode } from 'react';\nimport type { Token, Tokens } from 'marked';\n\nimport ReactRenderer, { HeadingLevels } from './ReactRenderer';\nimport { unescape } from './helpers';\n\ninterface ReactParserOptions {\n  renderer: ReactRenderer;\n}\n\nclass ReactParser {\n  renderer: ReactRenderer;\n\n  constructor(options: ReactParserOptions) {\n    this.renderer = options.renderer;\n  }\n\n  parse(tokens: Token[]): ReactNode[] {\n    this.renderer.elIdList.push(0);\n    const result = tokens.map((token) => {\n      switch (token.type) {\n        case 'space': {\n          return null;\n        }\n\n        case 'heading': {\n          const level = token.depth as HeadingLevels;\n          return this.renderer.heading(this.parseInline(token.tokens), level);\n        }\n\n        case 'paragraph': {\n          return this.renderer.paragraph(this.parseInline(token.tokens));\n        }\n\n        case 'text': {\n          const textToken = token as Tokens.Text;\n          return textToken.tokens ? this.parseInline(textToken.tokens) : token.text;\n        }\n\n        case 'blockquote': {\n          const blockquoteToken = token as Tokens.Blockquote;\n          const quote = this.parse(blockquoteToken.tokens);\n          return this.renderer.blockquote(quote);\n        }\n\n        case 'list': {\n          const listToken = token as Tokens.List;\n\n          this.renderer.elIdList.push(0);\n          const children = listToken.items.map((item) => {\n            const listItemChildren = [];\n\n            if (item.task) {\n              listItemChildren.push(this.renderer.checkbox(item.checked ?? false));\n            }\n\n            listItemChildren.push(this.parse(item.tokens));\n\n            return this.renderer.listItem(listItemChildren);\n          });\n          this.renderer.elIdList.pop();\n\n          return this.renderer.list(children, token.ordered, token.ordered ? token.start : undefined);\n        }\n\n        case 'code': {\n          return this.renderer.code(token.text, token.lang);\n        }\n\n        case 'html': {\n          return this.renderer.html(token.text);\n        }\n\n        case 'table': {\n          const tableToken = token as Tokens.Table;\n\n          this.renderer.elIdList.push(0);\n          const headerCells = tableToken.header.map((cell, index) => {\n            return this.renderer.tableCell(this.parseInline(cell.tokens), {\n              header: true,\n              align: token.align[index],\n            });\n          });\n          this.renderer.elIdList.pop();\n\n          const headerRow = this.renderer.tableRow(headerCells);\n          const header = this.renderer.tableHeader(headerRow);\n\n          this.renderer.elIdList.push(0);\n          const bodyChilren = tableToken.rows.map((row) => {\n            this.renderer.elIdList.push(0);\n            const rowChildren = row.map((cell, index) => {\n              return this.renderer.tableCell(this.parseInline(cell.tokens), {\n                header: false,\n                align: token.align[index],\n              });\n            });\n            this.renderer.elIdList.pop();\n\n            return this.renderer.tableRow(rowChildren);\n          });\n          this.renderer.elIdList.pop();\n\n          const body = this.renderer.tableBody(bodyChilren);\n\n          return this.renderer.table([header, body]);\n        }\n\n        case 'hr': {\n          return this.renderer.hr();\n        }\n\n        default: {\n          console.warn(`Token with \"${token.type}\" type was not found`); // eslint-disable-line no-console\n          return null;\n        }\n      }\n    });\n    this.renderer.elIdList.pop();\n    return result;\n  }\n\n  parseInline(tokens: Token[] = []): ReactNode[] {\n    this.renderer.elIdList.push(0);\n    const result = tokens.map((token) => {\n      switch (token.type) {\n        case 'text': {\n          return this.renderer.text(unescape(token.text));\n        }\n\n        case 'strong': {\n          return this.renderer.strong(this.parseInline(token.tokens));\n        }\n\n        case 'em': {\n          return this.renderer.em(this.parseInline(token.tokens));\n        }\n\n        case 'del': {\n          return this.renderer.del(this.parseInline(token.tokens));\n        }\n\n        case 'codespan': {\n          return this.renderer.codespan(unescape(token.text));\n        }\n\n        case 'link': {\n          return this.renderer.link(token.href, this.parseInline(token.tokens));\n        }\n\n        case 'image': {\n          return this.renderer.image(token.href, token.text, token.title);\n        }\n\n        case 'html': {\n          return this.renderer.html(token.text);\n        }\n\n        case 'br': {\n          return this.renderer.br();\n        }\n\n        case 'escape': {\n          return this.renderer.text(token.text);\n        }\n\n        default: {\n          console.warn(`Token with \"${token.type}\" type was not found`); // eslint-disable-line no-console\n          return null;\n        }\n      }\n    });\n    this.renderer.elIdList.pop();\n    return result;\n  }\n}\n\nexport default ReactParser;\n","import { createElement, ElementType, ReactElement, ReactNode } from 'react';\n\nimport { joinBase } from './helpers';\n\nexport type HeadingLevels = 1 | 2 | 3 | 4 | 5 | 6;\nexport interface TableFlags {\n  header?: boolean;\n  align?: 'center' | 'left' | 'right' | null;\n}\n\nexport type CustomReactRenderer = Partial<ReactRenderer>;\nexport type RendererMethods = keyof ReactRenderer;\n\nexport interface ReactRendererOptions {\n  baseURL?: string;\n  openLinksInNewTab?: boolean;\n  langPrefix?: string;\n  renderer?: CustomReactRenderer;\n}\n\nclass ReactRenderer {\n  elIdList: number[] = [];\n  #options: ReactRendererOptions;\n\n  constructor(options: ReactRendererOptions = {}) {\n    const { renderer } = options;\n\n    this.#options = options;\n\n    if (renderer && typeof renderer === 'object') {\n      Object.entries(renderer as ReactRenderer).forEach(([key, value]) => {\n        const rendererName = key as keyof ReactRenderer;\n        const rendererFunction = value;\n\n        if (\n          !this[rendererName] ||\n          rendererName === 'elementId' ||\n          rendererName === 'elIdList' ||\n          typeof rendererFunction !== 'function'\n        ) {\n          return;\n        }\n\n        Object.defineProperty(this, rendererName, {\n          value(this: ReactRenderer, ...args: Parameters<(typeof this)[typeof rendererName]>) {\n            this.#incrementElId();\n            return rendererFunction.apply(this, args);\n          },\n          writable: true,\n          enumerable: true,\n          configurable: true,\n        });\n      });\n    }\n  }\n\n  #h<T extends ElementType>(el: T, children: ReactNode = null, props = {}): ReactElement {\n    const elProps = {\n      key: `marked-react-${this.elementId}`,\n      suppressHydrationWarning: true,\n    };\n\n    this.#incrementElId();\n    return createElement(el, { ...props, ...elProps }, children);\n  }\n\n  #incrementElId() {\n    this.elIdList[this.elIdList.length - 1] += 1;\n  }\n\n  get elementId() {\n    return this.elIdList.join('-');\n  }\n\n  heading(children: ReactNode, level: HeadingLevels) {\n    return this.#h(`h${level}`, children);\n  }\n\n  paragraph(children: ReactNode) {\n    return this.#h('p', children);\n  }\n\n  link(href: string, text: ReactNode) {\n    const url = joinBase(href, this.#options.baseURL);\n    const target = this.#options.openLinksInNewTab ? '_blank' : null;\n    return this.#h('a', text, { href: url, target });\n  }\n\n  image(src: string, alt: string, title: string | null = null) {\n    const url = joinBase(src, this.#options.baseURL);\n    return this.#h('img', null, { src: url, alt, title });\n  }\n\n  codespan(code: ReactNode, lang: string | null = null) {\n    const className = lang ? `${this.#options.langPrefix}${lang}` : null;\n    return this.#h('code', code, { className });\n  }\n\n  code(code: ReactNode, lang: string | undefined) {\n    return this.#h('pre', this.codespan(code, lang));\n  }\n\n  blockquote(children: ReactNode) {\n    return this.#h('blockquote', children);\n  }\n\n  list(children: ReactNode, ordered: boolean, start: number | undefined) {\n    return this.#h(ordered ? 'ol' : 'ul', children, ordered && start !== 1 ? { start } : {});\n  }\n\n  listItem(children: ReactNode[]) {\n    return this.#h('li', children);\n  }\n\n  checkbox(checked: ReactNode) {\n    return this.#h('input', null, {\n      type: 'checkbox',\n      disabled: true,\n      checked,\n    });\n  }\n\n  table(children: ReactNode[]) {\n    return this.#h('table', children);\n  }\n\n  tableHeader(children: ReactNode) {\n    return this.#h('thead', children);\n  }\n\n  tableBody(children: ReactNode[]) {\n    return this.#h('tbody', children);\n  }\n\n  tableRow(children: ReactNode[]) {\n    return this.#h('tr', children);\n  }\n\n  tableCell(children: ReactNode[], flags: TableFlags) {\n    const tag = flags.header ? 'th' : 'td';\n    return this.#h(tag, children, { align: flags.align });\n  }\n\n  strong(children: ReactNode) {\n    return this.#h('strong', children);\n  }\n\n  em(children: ReactNode) {\n    return this.#h('em', children);\n  }\n\n  del(children: ReactNode) {\n    return this.#h('del', children);\n  }\n\n  text(text: ReactNode) {\n    return text;\n  }\n\n  html(html: ReactNode) {\n    return html;\n  }\n\n  hr() {\n    return this.#h('hr');\n  }\n\n  br() {\n    return this.#h('br');\n  }\n}\n\nexport default ReactRenderer;\n","import { createElement, Fragment } from 'react';\nimport { Marked, MarkedOptions } from 'marked';\n\nimport ReactParser from './ReactParser';\nimport ReactRenderer, { ReactRendererOptions } from './ReactRenderer';\n\ntype LexerOptions = Pick<MarkedOptions, 'breaks' | 'gfm'>;\n\nexport interface MarkdownProps extends ReactRendererOptions, LexerOptions {\n  value?: string;\n  children?: string;\n  isInline?: boolean;\n  instance?: Marked;\n}\n\nconst validateComponentProps = (props: MarkdownProps) => {\n  if (props.value && typeof props.value !== 'string') {\n    throw new TypeError(`[marked-react]: Expected value to be of type string but got ${typeof props.value}`);\n  }\n\n  if (props.children && typeof props.children !== 'string') {\n    throw new TypeError(`[marked-react]: Expected children to be of type string but got ${typeof props.children}`);\n  }\n};\n\nconst defaultProps = {\n  isInline: false,\n  breaks: false,\n  gfm: true,\n  baseURL: undefined,\n  openLinksInNewTab: true,\n  langPrefix: 'language-',\n  renderer: undefined,\n};\n\nconst markedInstance = new Marked();\n\nconst Markdown = (props: MarkdownProps) => {\n  validateComponentProps(props);\n\n  const options = { ...defaultProps, ...props };\n  const marked = options.instance ?? markedInstance;\n\n  // lexer options\n  const lexerOptions = {\n    breaks: options.breaks,\n    gfm: options.gfm,\n    tokenizer: marked.defaults.tokenizer,\n  };\n\n  // convert input markdown into tokens\n  const markdownString = options.value ?? options.children ?? '';\n\n  const tokens = options.isInline\n    ? marked.Lexer.lexInline(markdownString, lexerOptions)\n    : marked.lexer(markdownString, lexerOptions);\n\n  // parser options\n  const parserOptions = {\n    renderer: new ReactRenderer({\n      renderer: options.renderer,\n      baseURL: options.baseURL,\n      openLinksInNewTab: options.openLinksInNewTab,\n      langPrefix: options.langPrefix,\n    }),\n  };\n\n  const parser = new ReactParser(parserOptions);\n  const children = options.isInline ? parser.parseInline(tokens) : parser.parse(tokens);\n\n  return createElement(Fragment, null, children);\n};\n\nexport default Markdown;\n","import Markdown from './Markdown';\n\nexport { default as ReactParser } from './ReactParser';\nexport { default as ReactRenderer } from './ReactRenderer';\nexport default Markdown;\n"],"mappings":"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"}