yaml-fm
v0.1.3
Published
parse yaml frontmatter
Downloads
130
Readme
yaml-fm
About | Installation | API | Usage | License
About
yaml-fm
is a Node.js module that converts a String with YAML frontmatter to an Object.
It uses currying to be .map()
friendly and converts non-YAML content to a trimmed Buffer.
Use it to build your own personal static-site generator!
Turn this:
---
title: Hello world
slug: post/hello_world/index.html
tags:
- excellent
- adventure
---
Hello world!
Into this:
{
title: 'Hello world',
slug: 'post/hello_world/index.html',
tags: ['excellent', 'adventure'],
content: <Buffer 48 65 6c 6c 6f 20 77 6f 72 6c 64 21>
}
Installation
Install
$ npm install --save yaml-fm
Require
var fm = require('yaml-fm')
API
yaml-fm(delim)
delim
: string: required delimiter before and after YAML frontmatter
Returns an anonymous function.
fn(string)
string
: string: string to parse containing YAML frontmatter
Returns a flat JS object.
Non-frontmatter is trimmed, converted to a Buffer, and included in Object.content
.
Usage
Without .map()
// require module
var fm = require('yaml-fm')
// delimiter for YAML
var delim = '---'
// string containing YAML frontmatter
var stringWithFm = `
---
title: Hello world
slug: post/hello_world/index.html
tags:
- excellent
- adventure
---
Hello world!
`
// parse string
// NOTE: because fm is curried, it must be called twice
var fmObj = fm(delim)(stringWithFm)
/**
fmObj:
{
title: 'Hello world',
slug: 'post/hello_world/index.html',
tags: ['excellent', 'adventure'],
content: <Buffer 48 65 6c 6c 6f 20 77 6f 72 6c 64 21>
}
*/
With .map()
See example.
// modules
var fm = require('../')
var fs = require('fs')
var globby = require('globby')
var bb = require('bluebird')
// promisify fs.readFile
var read = path => bb.promisify(fs.readFile)(path, 'utf8')
// glob -> paths -> strings -> objects
globby('content/*.md')
.then(paths => bb.all(paths.map(read)))
.then(strs => strs.map(fm('---')))
.then(console.log)
.catch(console.log)
/**
NOTE:
The fm transform could also look like this:
.then(strs => strs.map(str => fm('---')(str)))
Because yaml-fm uses currying, we can shorten that to the code seen above:
.then(strs => strs.map(fm('---')))
*/