Skip to content

codekirei/yaml-fm

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

About

parse yaml frontmatter

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published