yaml-fm

0.1.3 • Public • Published

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

Readme

Keywords

Package Sidebar

Install

npm i yaml-fm

Weekly Downloads

10

Version

0.1.3

License

MIT

Last publish

Collaborators

  • codekirei