extract-md-data
TypeScript icon, indicating that this package has built-in type declarations

2.0.6 • Public • Published

npm version

extract-md-data

A util for getting data and metadata for all markdown files in a given dir. Useful for building static site generators.

Usage

Given this example file structure:

.
└── src
    ├── docs
    │   ├── Day-One.md
    │   ├── Day-Two.md
    │   └── not-markdown.txt
    └── index.js

Day-One.md

---
title: day one
tags:
  - foo
  - bar
---

# On the first day

God created markdown

Day-Two.md

---
title: day two
tags:
  - baz
  - pistachio
---

# On the second day

God created another markdown

To get JSON data for all the markdown files in docs folder:

// index.js

const extract = require('extract-md-data');
const path = require('path');

/* Define project rootDir and srcDir where the markdown files live */
const rootDir = path.resolve(__dirname);
const srcDir = path.resolve(rootDir, 'docs');

const jsons = extract(rootDir, srcDir);

console.log(jsons);
[
  {
    "fm": {
      "title": "day one",
      "tags": ["foo", "bar"]
    },
    "content": "\n# On the first day\n\nGod created markdown\n",
    "relativePath": "docs/Day-One.md",
    "relativeDir": "docs",
    "filename": "Day-One.md",
    "slug": "day-one",
    "id": "be308ccd-71e6-5339-97d9-947670d116ba"
  },
  {
    "fm": {
      "title": "day two",
      "tags": ["baz", "pistachio"]
    },
    "content": "\n# On the second day\n\nGod created another markdown\n",
    "relativePath": "docs/Day-Two.md",
    "relativeDir": "docs",
    "filename": "Day-Two.md",
    "slug": "day-two",
    "id": "c115a245-d83c-5a8e-9d61-2bb40c05afdb"
  }
]

This data can be used with templating libraries like pug or handlebars to build out static websites based off the markdown files.

You can make your own routing logic - perhaps you want to leverage relativeDir? Up to you!

Features

  • gets data for all files in srcDir with .md and .markdown extensions, recursively
  • ignores non-markdown files
  • extracts any custom yaml frontmatter into an object fm
  • extracts relativeDir for use with file-based routing
  • generates a unique id for each file by hashing the relativePath
  • generates a url-safe slug for each file based on the filename

Config

You can optionally pass a config object as a third argument.

const jsons = extract(rootDir, srcDir, opts);

options.slugify

Options for slugify. See available settings. These are the default settings:

{
  slugify: {
    replacement: '-',
    remove: /[*+~.()'"!:@$%^()]/g,
    lower: true,
    strict: true,
    trim: true
  }
}

options.omitContent

Boolean indicating whether or not to return markdown body content. You can set this to true if you don't need the markdown bodies from the files and want to save memory. Defaults to false

{
  // omits markdown body in returned objects
  omitContent: true;
}

Development

Install

npm install

Testing

npm run test

Package Sidebar

Install

npm i extract-md-data

Weekly Downloads

0

Version

2.0.6

License

MIT

Unpacked Size

12.7 kB

Total Files

13

Last publish

Collaborators

  • clairefro