JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 3347127
  • Score
    100M100P100Q209104F
  • License MIT

rehype plugin to reparse the tree (and raw nodes)

Package Exports

  • rehype-raw

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (rehype-raw) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

rehype-raw

Build Coverage Downloads Size Sponsors Backers Chat

rehype plugin to parse the tree again (and raw nodes). Keeping positional info OK. 🙌

Tiny wrapper around hast-util-raw

Install

This package is ESM only: Node 12+ is needed to use it and it must be imported instead of required.

npm:

npm install rehype-raw

Use

Say we have the following Markdown file, example.md:

<div class="note">

A mix of *Markdown* and <em>HTML</em>.

</div>

And our script, example.js, looks as follows:

import {readSync} from 'to-vfile'
import {reporter} from 'vfile-reporter'
import {unified} from 'unified'
import remarkParse from 'remark-parse'
import remarkRehype from 'remark-rehype'
import rehypeRaw from 'rehype-raw'
import rehypeDocument from 'rehype-document'
import rehypeFormat from 'rehype-format'
import rehypeStringify from 'rehype-stringify'

const file = readSync('example.md')

unified()
  .use(remarkParse)
  .use(remarkRehype, {allowDangerousHtml: true})
  .use(rehypeRaw)
  .use(rehypeDocument, {title: '🙌'})
  .use(rehypeFormat)
  .use(rehypeStringify)
  .process(file)
  .then((file) => {
    console.error(reporter(file))
    console.log(String(file))
  })

Now, running node example yields:

example.md: no issues found
<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>🙌</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
  </head>
  <body>
    <div class="note">
      <p>A mix of <em>Markdown</em> and <em>HTML</em>.</p>
    </div>
  </body>
</html>

API

This package exports no identifiers. The default export is rehypeRaw.

unified().use(rehypeRaw[, options])

Parse the tree again, also parsing “raw” nodes (as exposed by remark-rehype). options are passed to hast-util-raw.

Note

This project parses a hast tree with embedded raw HTML. This typically occurs because we’re coming from Markdown, often parsed by remark-parse. Inside Markdown, HTML is a black box: Markdown doesn’t know what’s inside that HTML. So, when rehype-raw maps Markdown to HTML, it cannot understand raw embedded HTML.

That’s where this project comes in.

But, Markdown is much terser than HTML, so it’s often preferred to use Markdown, in HTML, inside Markdown. As can be seen in the above example.

However, Markdown can only be mixed with HTML in some cases. Take the following examples:

  • Warning: does not work:

    <div class="note">
    A mix of *Markdown* and <em>HTML</em>.
    </div>

    …this is seen as one big block of HTML:

    <div class="note">
    A mix of *Markdown* and <em>HTML</em>.
    <div>
  • This does work:

    <div class="note">
    
    A mix of *Markdown* and <em>HTML</em>.
    
    </div>

    …it’s one block with the opening HTML tag, then a paragraph of Markdown, and another block with closing HTML tag. That’s because of the blank lines:

    <div class="note">
    A mix of <em>Markdown</em> and <em>HTML</em>.
    <div>
  • This also works:

    <span class="note">A mix of *Markdown* and <em>HTML</em>.</span>

    …Inline tags are parsed as separate tags, with Markdown in between:

    <p><span class="note">A mix of <em>Markdown</em> and <em>HTML</em>.</span></p>

    This occurs if the tag name is not included in the list of block tag names.

Security

Improper use of rehype-raw can open you up to a cross-site scripting (XSS) attack.

Either do not combine this plugin with user content or use rehype-sanitize.

Contribute

See contributing.md in rehypejs/.github for ways to get started. See support.md for ways to get help.

This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.

License

MIT © Titus Wormer