• Stars
    star
    664
  • Rank 67,903 (Top 2 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 12 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Extract YAML front matter from strings

front-matter

build coverage npm github

Sauce Test Status

Extract meta data (front-matter) from documents.

This modules does not do any IO (file loading or reading), only extracting and parsing front matter from strings.

This concept that was originally introduced to me through the jekyll blogging system and is pretty useful where you want to be able to easily add meta-data to content without the need for a database. YAML is extracted from the the top of a file between matching separators of "---" or "= yaml =". It will also extract YAML between a separator and "...".

Install

With npm do:

npm install front-matter

Example

So you have a file example.md:

---
title: Just hack'n
description: Nothing to see here
---

This is some text about some stuff that happened sometime ago

NOTE: As of [email protected] valid front matter is considered to have the starting separator on the first line.

Then you can do this:

var fs = require('fs')
  , fm = require('front-matter')

fs.readFile('./example.md', 'utf8', function(err, data){
  if (err) throw err

  var content = fm(data)

  console.log(content)
})

And end up with an object like this:

{
    attributes: {
        title: 'Just hack\'n',
        description: 'Nothing to see here'
    },
    body: 'This is some text about some stuff that happened sometime ago',
    bodyBegin: 6,
    frontmatter: 'title: Just hack\'n\ndescription: Nothing to see here'
}

Methods

var fm = require('front-matter')

fm(string, { allowUnsafe: false })

Return a content object with two properties:

  • content.attributes contains the extracted yaml attributes in json form
  • content.body contains the string contents below the yaml separators
  • content.bodyBegin contains the line number the body contents begins at
  • content.frontmatter contains the original yaml string contents

NOTE: By default fm() uses ys-yaml's safeLoad unless you set allowUnsafe in the options object to true.

fm.test(string)

Check if a string contains a front matter header of "---" or "= yaml =". Primarily used internally but is useful outside of the module.

Returns true or false

    fm.test(string) #=> true || false

Contributing

front-matter is an OPEN Source Project so please help out by reporting bugs or forking and opening pull requests when possible.

standard

All code is linted/formatted using standard style, any non-conforming code can be automatically formatted using the the fmt make task: make fmt.

Maintainers

Contributors

This module is awesome because of all the folks who submitted pull requests:

CHANGELOG

3.0.0

  • CI only tests Node versions >= v6 (drops v4, and v5)

LICENSE (MIT)

Copyright (c) Jason Campbell ("Author")

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

More Repositories

1

html5-file-drag-and-drop

A simple example of how to implement Drag and Drop for files
JavaScript
11
star
2

command-router

A simple router and parser (using nopt) for CLI apps with multiple commands
JavaScript
10
star
3

envjs-cucumber-example

An example sinatra application using envjs as the capybara driver for cucumber
Ruby
9
star
4

haiku

Another static site generator.
JavaScript
9
star
5

string-humanize

just the .humanize() function from string.js
JavaScript
7
star
6

rust-flutter

Groovy
7
star
7

to-directory

A CLI utility for bookmarking directories with tab completion
Rust
4
star
8

dotfiles

My dotfiles
Shell
3
star
9

lorem

A Rails lorem ipsum generator
Ruby
3
star
10

k-and-r-2

Working solutions to the excercises in "The C Programming Language", 2nd edition, Kernighan and Ritchie
C
3
star
11

spark

Spark is a way of initializing/seeding your project's DB, either programatically or via fixtures (*blech*)
Ruby
2
star
12

powerwalk

Recursively walks a directory and emits filenames. Supports additional stat and read events (if you want them).
JavaScript
2
star
13

modules

Dart
2
star
14

jsconf2012

My notes from JSConf and NotConf 2012
2
star
15

no-frameworks

An example project for the technical article "Building A Node.js Server Without Frameworks"
JavaScript
2
star
16

greatergood.github.com

Dear Clients, We are done. Thank you, Greater Good, Inc.
JavaScript
2
star
17

looking-back-at-retrollect

This is a list of the dos and don'ts of building a cross platform HTML5 application as learned during the development of the Iphone and Android application Retrollect
Ruby
2
star
18

beamer

Node.js lib and CLI for syncing directories to S3
JavaScript
2
star
19

mkdirp-stream

A streaming mkdirp
JavaScript
2
star
20

blargh

Rack based blogging engine
Ruby
1
star
21

braincloud

The sinatra source code for my soon to be blog
Ruby
1
star
22

jspec-firefox-extension-example

This is an example Firefox Extension that uses JSpec
JavaScript
1
star
23

modules-email

Dart
1
star
24

tape-rs

Experimental Rust version of substack's NPM module "tape"
Rust
1
star
25

dotfiles-1

Configuration Files
Vim Script
1
star
26

spire.js

Isomorphic JavaScript client for the spire.io API
JavaScript
1
star
27

highballr

A Safari Extension that lets you post any image to Tumblr via right click
JavaScript
1
star
28

reader

Example PDF reader application
Java
1
star
29

p2p-workshop

Working through https://p2p-workshop.mafintosh.com
JavaScript
1
star
30

gojira

Rust
1
star
31

sparky

Light it up sparky! Random text (lorem ipsum), numbers, and names that at least look real..
Ruby
1
star
32

jxson.github.com

My github page
1
star
33

string-capitalize

Capitalizes a string.
JavaScript
1
star