remark-parse
Advanced tools
Comparing version 10.0.0 to 10.0.1
{ | ||
"name": "remark-parse", | ||
"version": "10.0.0", | ||
"description": "remark plugin to parse markdown", | ||
"version": "10.0.1", | ||
"description": "remark plugin to add support for parsing markdown input", | ||
"license": "MIT", | ||
@@ -6,0 +6,0 @@ "keywords": [ |
320
readme.md
@@ -11,16 +11,67 @@ # remark-parse | ||
[Parser][] for [**unified**][unified]. | ||
Parses markdown to [**mdast**][mdast] syntax trees. | ||
Built on [`micromark`][micromark] and | ||
[`mdast-util-from-markdown`][from-markdown]. | ||
Used in the [**remark** processor][remark] but can be used on its own as well. | ||
Can be [extended][extend] to change how markdown is parsed. | ||
**[remark][]** plugin to add support for parsing markdown input. | ||
## Contents | ||
* [What is this?](#what-is-this) | ||
* [When should I use this?](#when-should-i-use-this) | ||
* [Install](#install) | ||
* [Use](#use) | ||
* [API](#api) | ||
* [`unified().use(remarkParse)`](#unifieduseremarkparse) | ||
* [Examples](#examples) | ||
* [Example: support GFM and frontmatter](#example-support-gfm-and-frontmatter) | ||
* [Example: turning markdown into a man page](#example-turning-markdown-into-a-man-page) | ||
* [Syntax](#syntax) | ||
* [Syntax tree](#syntax-tree) | ||
* [Types](#types) | ||
* [Compatibility](#compatibility) | ||
* [Security](#security) | ||
* [Contribute](#contribute) | ||
* [Sponsor](#sponsor) | ||
* [License](#license) | ||
## What is this? | ||
This package is a [unified][] ([remark][]) plugin that defines how to take | ||
markdown as input and turn it into a syntax tree. | ||
This plugin is built on [`mdast-util-from-markdown`][mdast-util-from-markdown], | ||
which in turn uses [`micromark`][micromark] for parsing markdown into tokens and | ||
turns those into [mdast][] syntax trees. | ||
remark focusses on making it easier to transform content by abstracting such | ||
internals away. | ||
**unified** is a project that transforms content with abstract syntax trees | ||
(ASTs). | ||
**remark** adds support for markdown to unified. | ||
**mdast** is the markdown AST that remark uses. | ||
**micromark** is the markdown parser we use. | ||
This is a remark plugin that defines how input markdown is turned into mdast. | ||
## When should I use this? | ||
This plugin adds support to unified for parsing markdown. | ||
You can alternatively use [`remark`][remark-core] instead, which combines | ||
unified, this plugin, and [`remark-stringify`][remark-stringify]. | ||
You can combine this plugin with other plugins to add syntax extensions. | ||
Notable examples that deeply integrate with it are | ||
[`remark-gfm`][remark-gfm], | ||
[`remark-mdx`][remark-mdx], | ||
[`remark-frontmatter`][remark-frontmatter], | ||
[`remark-math`][remark-math], and | ||
[`remark-directive`][remark-directive]. | ||
You can also use any other [remark plugin][plugin] after `remark-parse`. | ||
If you *just* want to turn markdown into HTML (with maybe a few extensions), | ||
we recommend [`micromark`][micromark] instead. | ||
If you want to handle syntax trees manually, you can use | ||
[`mdast-util-from-markdown`][mdast-util-from-markdown]. | ||
## Install | ||
This package is [ESM only](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c): | ||
Node 12+ is needed to use it and it must be `import`ed instead of `require`d. | ||
This package is [ESM only](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c). | ||
In Node.js (version 12.20+, 14.14+, or 16.0+), install with [npm][]: | ||
[npm][]: | ||
```sh | ||
@@ -30,4 +81,20 @@ npm install remark-parse | ||
In Deno with [Skypack][]: | ||
```js | ||
import remarkParse from 'https://cdn.skypack.dev/remark-parse@10?dts' | ||
``` | ||
In browsers with [Skypack][]: | ||
```html | ||
<script type="module"> | ||
import remarkParse from 'https://cdn.skypack.dev/remark-parse@10?min' | ||
</script> | ||
``` | ||
## Use | ||
Say we have the following module `example.js`: | ||
```js | ||
@@ -40,14 +107,17 @@ import {unified} from 'unified' | ||
unified() | ||
.use(remarkParse) | ||
.use(remarkGfm) | ||
.use(remarkRehype) | ||
.use(rehypeStringify) | ||
.process('# Hi\n\n*Hello*, world!') | ||
.then((file) => { | ||
console.log(String(file)) | ||
}) | ||
main() | ||
async function main() { | ||
const file = await unified() | ||
.use(remarkParse) | ||
.use(remarkGfm) | ||
.use(remarkRehype) | ||
.use(rehypeStringify) | ||
.process('# Hi\n\n*Hello*, world!') | ||
console.log(String(file)) | ||
} | ||
``` | ||
Yields: | ||
Running that with `node example.js` yields: | ||
@@ -59,8 +129,4 @@ ```html | ||
[See **unified** for more examples »][unified] | ||
## API | ||
[See **unified** for API docs »][unified] | ||
This package exports no identifiers. | ||
@@ -71,16 +137,108 @@ The default export is `remarkParse`. | ||
Configure the `processor` to read markdown as input and process | ||
[**mdast**][mdast] syntax trees. | ||
Add support for parsing markdown input. | ||
There are no options. | ||
## Extending the parser | ||
## Examples | ||
See [`micromark`][micromark] and [`mdast-util-from-markdown`][from-markdown]. | ||
Then create a wrapper plugin such as [`remark-gfm`][gfm]. | ||
### Example: support GFM and frontmatter | ||
We support CommonMark by default. | ||
Non-standard markdown extensions can be enabled with plugins. | ||
The following example adds support for GFM features (autolink literals, | ||
footnotes, strikethrough, tables, tasklists) and frontmatter (YAML): | ||
```js | ||
import {unified} from 'unified' | ||
import remarkParse from 'remark-parse' | ||
import remarkFrontmatter from 'remark-frontmatter' | ||
import remarkGfm from 'remark-gfm' | ||
import remarkRehype from 'remark-rehype' | ||
import rehypeStringify from 'rehype-stringify' | ||
main() | ||
async function main() { | ||
const file = await unified() | ||
.use(remarkParse) | ||
.use(remarkFrontmatter) | ||
.use(remarkGfm) | ||
.use(remarkRehype) | ||
.use(rehypeStringify) | ||
.process('---\nlayout: home\n---\n\n# Hi ~~Mars~~Venus!') | ||
console.log(String(file)) | ||
} | ||
``` | ||
Yields: | ||
```html | ||
<h1>Hi <del>Mars</del>Venus!</h1> | ||
``` | ||
### Example: turning markdown into a man page | ||
Man pages (short for manual pages) are a way to document CLIs (example: type | ||
`man git-log` in your terminal). | ||
They use an old markup format called roff. | ||
There’s a remark plugin, [`remark-man`][remark-man], that can serialize as roff. | ||
The following example turns markdown into man pages by using unified with | ||
`remark-parse` and `remark-man`: | ||
```js | ||
import {unified} from 'unified' | ||
import remarkParse from 'remark-parse' | ||
import remarkMan from 'remark-man' | ||
main() | ||
async function main() { | ||
const file = await unified() | ||
.use(remarkParse) | ||
.use(remarkMan) | ||
.process('# titan(7) -- largest moon of saturn\n\nTitan is the largest moon…') | ||
console.log(String(file)) | ||
} | ||
``` | ||
Yields: | ||
```roff | ||
.TH "TITAN" "7" "November 2021" "" "" | ||
.SH "NAME" | ||
\fBtitan\fR - largest moon of saturn | ||
.P | ||
Titan is the largest moon… | ||
``` | ||
## Syntax | ||
Markdown is parsed according to CommonMark. | ||
Other plugins can add support for syntax extensions. | ||
If you’re interested in extending markdown, | ||
[more information is available in micromark’s readme][micromark-extend]. | ||
## Syntax tree | ||
The syntax tree format used in remark is [mdast][]. | ||
## Types | ||
This package is fully typed with [TypeScript][]. | ||
There are no extra exported types. | ||
## Compatibility | ||
Projects maintained by the unified collective are compatible with all maintained | ||
versions of Node.js. | ||
As of now, that is Node.js 12.20+, 14.14+, and 16.0+. | ||
Our projects sometimes work with older versions, but this is not guaranteed. | ||
## Security | ||
As markdown is sometimes used for HTML, and improper use of HTML can open you up | ||
to a [cross-site scripting (XSS)][xss] attack, use of remark can also be unsafe. | ||
When going to HTML, use remark in combination with the [**rehype**][rehype] | ||
ecosystem, and use [`rehype-sanitize`][sanitize] to make the tree safe. | ||
As markdown can be turned into HTML and improper use of HTML can open you up to | ||
[cross-site scripting (XSS)][xss] attacks, use of remark can be unsafe. | ||
When going to HTML, you will likely combine remark with **[rehype][]**, in which | ||
case you should use [`rehype-sanitize`][rehype-sanitize]. | ||
@@ -90,2 +248,4 @@ Use of remark plugins could also open you up to other attacks. | ||
For info on how to submit a report, see our [security policy][security]. | ||
## Contribute | ||
@@ -96,7 +256,4 @@ | ||
See [`support.md`][support] for ways to get help. | ||
Ideas for new plugins and tools can be posted in [`remarkjs/ideas`][ideas]. | ||
Join us in [Discussions][chat] to chat with the community and contributors. | ||
A curated list of awesome remark resources can be found in [**awesome | ||
remark**][awesome]. | ||
This project has a [code of conduct][coc]. | ||
@@ -114,11 +271,19 @@ By interacting with this repository, organization, or community you agree to | ||
<tr valign="middle"> | ||
<td width="20%" align="center" colspan="2"> | ||
<a href="https://www.gatsbyjs.org">Gatsby</a> 🥇<br><br> | ||
<td width="20%" align="center" rowspan="2" colspan="2"> | ||
<a href="https://vercel.com">Vercel</a><br><br> | ||
<a href="https://vercel.com"><img src="https://avatars1.githubusercontent.com/u/14985020?s=256&v=4" width="128"></a> | ||
</td> | ||
<td width="20%" align="center" rowspan="2" colspan="2"> | ||
<a href="https://motif.land">Motif</a><br><br> | ||
<a href="https://motif.land"><img src="https://avatars1.githubusercontent.com/u/74457950?s=256&v=4" width="128"></a> | ||
</td> | ||
<td width="20%" align="center" rowspan="2" colspan="2"> | ||
<a href="https://www.hashicorp.com">HashiCorp</a><br><br> | ||
<a href="https://www.hashicorp.com"><img src="https://avatars1.githubusercontent.com/u/761456?s=256&v=4" width="128"></a> | ||
</td> | ||
<td width="20%" align="center" rowspan="2" colspan="2"> | ||
<a href="https://www.gatsbyjs.org">Gatsby</a><br><br> | ||
<a href="https://www.gatsbyjs.org"><img src="https://avatars1.githubusercontent.com/u/12551863?s=256&v=4" width="128"></a> | ||
</td> | ||
<td width="20%" align="center" colspan="2"> | ||
<a href="https://vercel.com">Vercel</a> 🥇<br><br> | ||
<a href="https://vercel.com"><img src="https://avatars1.githubusercontent.com/u/14985020?s=256&v=4" width="128"></a> | ||
</td> | ||
<td width="20%" align="center" colspan="2"> | ||
<td width="20%" align="center" rowspan="2" colspan="2"> | ||
<a href="https://www.netlify.com">Netlify</a><br><br> | ||
@@ -128,5 +293,9 @@ <!--OC has a sharper image--> | ||
</td> | ||
</tr> | ||
<tr valign="middle"> | ||
</tr> | ||
<tr valign="middle"> | ||
<td width="10%" align="center"> | ||
<a href="https://www.holloway.com">Holloway</a><br><br> | ||
<a href="https://www.holloway.com"><img src="https://avatars1.githubusercontent.com/u/35904294?s=128&v=4" width="64"></a> | ||
<a href="https://www.coinbase.com">Coinbase</a><br><br> | ||
<a href="https://www.coinbase.com"><img src="https://avatars1.githubusercontent.com/u/1885080?s=256&v=4" width="64"></a> | ||
</td> | ||
@@ -138,2 +307,6 @@ <td width="10%" align="center"> | ||
<td width="10%" align="center"> | ||
<a href="https://expo.io">Expo</a><br><br> | ||
<a href="https://expo.io"><img src="https://avatars1.githubusercontent.com/u/12504344?s=128&v=4" width="64"></a> | ||
</td> | ||
<td width="10%" align="center"> | ||
<a href="https://boosthub.io">Boost Hub</a><br><br> | ||
@@ -143,5 +316,10 @@ <a href="https://boosthub.io"><img src="https://images.opencollective.com/boosthub/6318083/logo/128.png" width="64"></a> | ||
<td width="10%" align="center"> | ||
<a href="https://expo.io">Expo</a><br><br> | ||
<a href="https://expo.io"><img src="https://avatars1.githubusercontent.com/u/12504344?s=128&v=4" width="64"></a> | ||
<a href="https://www.holloway.com">Holloway</a><br><br> | ||
<a href="https://www.holloway.com"><img src="https://avatars1.githubusercontent.com/u/35904294?s=128&v=4" width="64"></a> | ||
</td> | ||
<td width="10%"></td> | ||
<td width="10%"></td> | ||
<td width="10%"></td> | ||
<td width="10%"></td> | ||
<td width="10%"></td> | ||
</tr> | ||
@@ -189,14 +367,12 @@ <tr valign="middle"> | ||
[security]: https://github.com/remarkjs/.github/blob/main/security.md | ||
[health]: https://github.com/remarkjs/.github | ||
[contributing]: https://github.com/remarkjs/.github/blob/HEAD/contributing.md | ||
[contributing]: https://github.com/remarkjs/.github/blob/main/contributing.md | ||
[support]: https://github.com/remarkjs/.github/blob/HEAD/support.md | ||
[support]: https://github.com/remarkjs/.github/blob/main/support.md | ||
[coc]: https://github.com/remarkjs/.github/blob/HEAD/code-of-conduct.md | ||
[coc]: https://github.com/remarkjs/.github/blob/main/code-of-conduct.md | ||
[ideas]: https://github.com/remarkjs/ideas | ||
[awesome]: https://github.com/remarkjs/awesome-remark | ||
[license]: https://github.com/remarkjs/remark/blob/main/license | ||
@@ -208,22 +384,40 @@ | ||
[skypack]: https://www.skypack.dev | ||
[unified]: https://github.com/unifiedjs/unified | ||
[remark]: https://github.com/remarkjs/remark/tree/main/packages/remark | ||
[remark]: https://github.com/remarkjs/remark | ||
[mdast]: https://github.com/syntax-tree/mdast | ||
[parser]: https://github.com/unifiedjs/unified#processorparser | ||
[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting | ||
[extend]: #extending-the-parser | ||
[typescript]: https://www.typescriptlang.org | ||
[xss]: https://en.wikipedia.org/wiki/Cross-site_scripting | ||
[rehype]: https://github.com/rehypejs/rehype | ||
[sanitize]: https://github.com/rehypejs/rehype-sanitize | ||
[rehype-sanitize]: https://github.com/rehypejs/rehype-sanitize | ||
[mdast-util-from-markdown]: https://github.com/syntax-tree/mdast-util-from-markdown | ||
[micromark]: https://github.com/micromark/micromark | ||
[from-markdown]: https://github.com/syntax-tree/mdast-util-from-markdown | ||
[micromark-extend]: https://github.com/micromark/micromark#extensions | ||
[gfm]: https://github.com/remarkjs/remark-gfm | ||
[remark-gfm]: https://github.com/remarkjs/remark-gfm | ||
[remark-mdx]: https://github.com/mdx-js/mdx/tree/main/packages/remark-mdx | ||
[remark-frontmatter]: https://github.com/remarkjs/remark-frontmatter | ||
[remark-math]: https://github.com/remarkjs/remark-math | ||
[remark-man]: https://github.com/remarkjs/remark-man | ||
[remark-directive]: https://github.com/remarkjs/remark-directive | ||
[remark-stringify]: ../remark-stringify/ | ||
[remark-core]: ../remark/ | ||
[plugin]: https://github.com/remarkjs/remark#plugin |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
16615
411