A fast frontmatter parser. Supports both string and stream inputs.
Given a document foo.md
containing YAML frontmatter and content:
---
title: Hello, World!
tags: [ foo, bar, baz ]
---
Lorem ipsum dolor sit amet consectetur adipisicing elit.
…we can parse this document as a string, via fastmatter(string)
:
const fastmatter = require('fastmatter')
const fs = require('fs')
fs.readFile('foo.md', 'utf8', function (error, data) {
if (error) {
throw error
}
console.log(fastmatter(data))
/* =>
* {
* attributes: {
* title: 'Hello, World!',
* tags: [ 'foo', 'bar', 'baz' ]
* },
* body: 'Lorem ipsum dolor sit amet consectetur adipisicing elit.'
* }
*/
})
…or as a stream, via fastmatter.stream([callback])
:
const fastmatter = require('fastmatter')
const fs = require('fs')
const concat = require('concat-stream')
fs.createReadStream('foo.md').pipe(
fastmatter.stream(function (attributes) {
console.log(attributes)
/* =>
* {
* title: 'Hello, World!',
* tags: [ 'foo', 'bar', 'baz' ]
* }
*/
this.pipe(
concat(function (body) {
console.log(body.toString())
//=> Lorem ipsum dolor sit amet consectetur adipisicing elit.
})
)
})
)
callback
is called with the frontmatter attributes
, while the document body
is simply passed through the stream. Also note that the this
context of callback
is the stream itself; this is useful if we want to change the flow of the stream depending on the parsed attributes
.
const fastmatter = require('fastmatter')
Parses the string
and returns the parsed frontmatter attributes
and document body
.
Calls callback
with the parsed frontmatter attributes
. The this
context of callback
is the stream itself. The document body
is passed through the stream.
Install via yarn:
$ yarn add fastmatter
Or npm:
$ npm install --save fastmatter