GithubHelp home page GithubHelp logo

front-matter's Introduction

@egoist/front-matter

NPM version NPM downloads CircleCI donate chat

Why another front-matter library?

This library is only 200 bytes 🤯 It's ultra light-weight because it doesn't really parse the front-matter, you can choose your language of choice to parse it instead, e.g. Yaml or Toml or even simply JSON.parse.

Install

yarn add @egoist/front-matter

Usage

const frontMatter = require('@egoist/front-matter')

const { head, body } = frontMatter(`
---
title: Hell World
---

Hi there?
`)

assert(head === 'title: Hello World')
assert(body === '\nHi there?')

Parse head with js-yaml:

const yaml = require('js-yaml')
const frontMatter = require('@egoist/front-matter')

const { head, body } = frontMatter(str)
const parsedHead = yaml.safeLoad(head)

API

frontMatter(str, delimiter = '---')

Contributing

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D

Author

@egoist/front-matter © egoist, Released under the MIT License.
Authored and maintained by egoist with help from contributors (list).

github.com/egoist · GitHub @egoist · Twitter @_egoistlily

front-matter's People

Contributors

egoist avatar sinchang avatar

Stargazers

sonopictorial avatar ʟᴊᴜɴɢᴍ•ʀᴋ avatar Eric Bailey avatar Kojiro Ishii avatar Brian Hanson avatar Quido Hoekman avatar Chauncey McAskill avatar  avatar Thomas Moore avatar Lan Qingyong avatar Vitor Mendrone avatar  avatar Jake Hamilton avatar  avatar Russell Daly avatar Asif Mehedi avatar Dario Vladović avatar Kai avatar 悔惜晟 avatar Yerko Palma avatar Rizki Lazuardi avatar Mikkel Malmberg avatar Yoga Kurniawan avatar Chunyang Huo avatar

Watchers

James Cloos avatar  avatar  avatar

front-matter's Issues

Regex Fail on String with Carriage Return

My markdown file that retrieved from fetch function always returned a newline with some "\r" symbol (carriage return). Example output:

---\r\norder: 4\r\n---\r\n\r\n#Heading 1\r\nLorem Ipsum

So the regex from this line won't work:

const RE = new RegExp(`^${delimiter}\\n+([\\s\\S]+)\\n+${delimiter}(?:\\n([\\s\\S]*))?$`)

This is my code and my workaround to solve this:

const frontMatter = require('@egoist/front-matter')

const res = await window.fetch 'doc.md'
const str = res.text
const  { head, body } = frontMatter(str.replace(/\r?/g, '')) // Remove \r symbol

return { head: head, body: body }

End head on first closing

Hi, currently this lib parses the head until the last '---' (delimiter). But it should use the first close tag (send delimiter) to end the head.

Example markdown file:

---
title: "An example title"
---

Some content here

---

This is the end

What happens is that is parses only "This is the end" as body and everything above as head. But this isn't correct.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.