An open API service indexing awesome lists of open source software.

https://github.com/bevry/docmatter

Battle tested SSG front matter parser. Extracted from DocPad. Delimiter lines have 3+ of the same character (such as /*** and ***/) allowing front matters to work with the syntax highlighting of your code editor. Supports custom parsers, e.g. --- cson. Parsers are handled externally.
https://github.com/bevry/docmatter

nodejs

Last synced: 8 months ago
JSON representation

Battle tested SSG front matter parser. Extracted from DocPad. Delimiter lines have 3+ of the same character (such as /*** and ***/) allowing front matters to work with the syntax highlighting of your code editor. Supports custom parsers, e.g. --- cson. Parsers are handled externally.

Awesome Lists containing this project

README

          

# docmatter

Status of the GitHub Workflow: bevry
NPM version
NPM downloads


GitHub Sponsors donate button
ThanksDev donate button
Patreon donate button
Liberapay donate button
Buy Me A Coffee donate button
Open Collective donate button
crypto donate button
PayPal donate button


Discord server badge
Twitch community badge

Battle tested SSG front matter parser. Extracted from DocPad. Delimiter lines have 3+ of the same character (such as `/***` and `***/`) allowing front matters to work with the syntax highlighting of your code editor. Supports custom parsers, e.g. `--- cson`. Parsers are handled externally.

## Usage

docmatter is designed to be functional yet minimal, default parser as well as parsing of the headers are handled by you

``` js
const docmatter = require('docmatter')
const yamljs = require('yamljs')

function parse (input) {
const matter = docmatter(input)

// if no front matter: {content}
if (!matter.header) return { content: matter.content.trim() }

// if front matter: {delimiter, parser, header, body, content}
let data = null
switch (matter.parser) {
case 'json':
if (matter.header[0] === '{' && matter.header[matter.header.length - 1] === '}') {
data = JSON.parse(matter.header)
}
else {
data = JSON.parse(`{${matter.header}}`)
}
break;

case 'yaml':
default:
data = yamljs.parse(
matter.header.replace(/\t/g, ' ') // YAML doesn't support tabs that well
)
break;
}
return { data, content: matter.body.trim() }
}

// no content and only front matter
console.log(parse(`
---
title: Hello World
---
`))
// => { data: { title: 'Hello World' }, content: '' }

// markdown content with default front matter
console.log(parse(`
---
title: Hello World
---

**hello world**
`))
// => { data: { title: 'Hello World' }, content: '**hello world**' }

// markdown content with json front matter
console.log(parse(`
--- json
"title": "Hello World"
---

**hello world**
`))
// => { data: { title: 'Hello World' }, content: '**hello world**' }

// markdown content with no front matter
console.log(parse(`
**hello world**
`))
// => { content: '**hello world**' }

// javascript content with default front matter
console.log(parse(`
/***
minify: true
***/

alert('Hello World')
`))
// => { data: { minify: true }, content: 'alert(\'Hello World\')' }
```

## Install

### [npm](https://npmjs.com "npm is a package manager for javascript")

- Install: `npm install --save docmatter`
- Import: `import * as pkg from ('docmatter')`
- Require: `const pkg = require('docmatter')`

### [Editions](https://editions.bevry.me "Editions are the best way to produce and consume packages you care about.")

This package is published with the following editions:
- `docmatter/source/index.coffee` is [CoffeeScript](https://coffeescript.org "CoffeeScript is a little language that compiles into JavaScript") source code with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html "Node/CJS Modules") for modules
- `docmatter` aliases `docmatter/edition-esnext/index.js`
- `docmatter/edition-esnext/index.js` is [CoffeeScript](https://coffeescript.org "CoffeeScript is a little language that compiles into JavaScript") compiled for [Node.js](https://nodejs.org "Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine") 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html "Node/CJS Modules") for modules

## History

[Discover the release history by heading on over to the `HISTORY.md` file.](https://github.com/bevry/docmatter/blob/HEAD/HISTORY.md#files)

## Backers

### Code

[Discover how to contribute via the `CONTRIBUTING.md` file.](https://github.com/bevry/docmatter/blob/HEAD/CONTRIBUTING.md#files)

#### Authors

- [Benjamin Lupton](https://balupton.com) — Accelerating collaborative wisdom.

#### Maintainers

- [Benjamin Lupton](https://balupton.com) — Accelerating collaborative wisdom.

#### Contributors

- [Benjamin Lupton](https://github.com/balupton) — [view contributions](https://github.com/bevry/docmatter/commits?author=balupton "View the GitHub contributions of Benjamin Lupton on repository bevry/docmatter")

### Finances

GitHub Sponsors donate button
ThanksDev donate button
Patreon donate button
Liberapay donate button
Buy Me A Coffee donate button
Open Collective donate button
crypto donate button
PayPal donate button

#### Sponsors

- [Andrew Nesbitt](https://nesbitt.io) — Software engineer and researcher
- [Balsa](https://balsa.com) — We're Balsa, and we're building tools for builders.
- [Codecov](https://codecov.io) — Empower developers with tools to improve code quality and testing.
- [Poonacha Medappa](https://poonachamedappa.com)
- [Rob Morris](https://github.com/Rob-Morris)
- [Sentry](https://sentry.io) — Real-time crash reporting for your web apps, mobile apps, and games.
- [Syntax](https://syntax.fm) — Syntax Podcast

#### Donors

- [Andrew Nesbitt](https://nesbitt.io)
- [Armen Mkrtchian](https://mogoni.dev)
- [Balsa](https://balsa.com)
- [Chad](https://opencollective.com/chad8)
- [Codecov](https://codecov.io)
- [dr.dimitru](https://veliovgroup.com)
- [Elliott Ditman](https://elliottditman.com)
- [entroniq](https://gitlab.com/entroniq)
- [GitHub](https://github.com/about)
- [Hunter Beast](https://cryptoquick.com)
- [Jean-Luc Geering](https://github.com/jlgeering)
- [Michael Duane Mooring](https://mdm.cc)
- [Michael Harry Scepaniak](https://michaelscepaniak.com)
- [Mohammed Shah](https://github.com/smashah)
- [Mr. Henry](https://mrhenry.be)
- [Nermal](https://arjunaditya.vercel.app)
- [Pleo](https://pleo.io)
- [Poonacha Medappa](https://poonachamedappa.com)
- [Rob Morris](https://github.com/Rob-Morris)
- [Robert de Forest](https://github.com/rdeforest)
- [Sentry](https://sentry.io)
- [ServieJS](https://github.com/serviejs)
- [Skunk Team](https://skunk.team)
- [Syntax](https://syntax.fm)
- [WriterJohnBuck](https://github.com/WriterJohnBuck)

## License

Unless stated otherwise all works are:

- Copyright © [Benjamin Lupton](https://balupton.com)

and licensed under:

- [Artistic License 2.0](http://spdx.org/licenses/Artistic-2.0.html)