parse yaml frontmatter
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
example
.gitignore
.travis.yml
index.js
license
package.json
readme.md
test.js

readme.md

yaml-fm

Build Status Coverage Status MIT License

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('---')))
 */

License

MIT