Creates a json index from markdown content directory (static search generators) and later can be indexed in Algolia Search
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
examples
lib
.gitignore
README.md
index.js
package.json

README.md

Markdown to JSON converter

  • Easy conversion from markdown files to json, to create an index.

  • Later, you can inject the json into algolia search.

  • It accepts YAML or TOML front matters.

Install

	npm install markdown2json --save

Usage

Indexer

	var indexer = require("markdown2json").Indexer;

	indexer = new indexer(options);

	indexer.run().then(...);

"options" is a json with the following options:

  • dir: String. directory to loop and/or substitute in the path attribute generated in the parsed md file.
  • fileList : Array. Array of files (paths) to index.
  • index_empty_content: Boolean. If false, it won't add the md to the json if the content is empty. Default is true.
  • cleanMD: Boolean. If true, cleans markdown characters from content. Default is false.
  • excludeIfProps : Array. Excludes the document from index if a property exists.
  • removeProps: Array. Remove props from the Front Matter of the returned md.
  • excludes: Array of strings. Paths to avoid in the indexing

Parser

	var parser = require("markdown2json").parseMD;

	parser(file, options).then(...)

where "options" is a json with the following options:

  • dir: String. directory to replace and leave only relative path
  • cleanMD: Boolean. if true, cleans markdown characters from content. Default is false
  • removeProps: Array. Remove props from the Front Matter of the returned md.

Parsed objects

Parsed object include:

  • all the metadata in the front matter
  • path: filepath without the root dir, if present
  • objectID: base64 encoded path
  • content, if exists
  • indexTime: time in millis of the indexation

Example - loop over a content directory, for example, from gohugo static site generator

	var indexer = require("markdown2json").Indexer;

	var algoliasearch = require('algoliasearch');
	var client = algoliasearch('YOURAPP ID', 'MANAGEMENT API KEY');
	var algolia = client.initIndex('indexname');

	indexer = new indexer(
		{
			"dir" : "./content",
			"domain" : "http://yourdomain.com",
			"index_empty_content" : false, //if md content == "", is not indexed
			"excludeIfProps" : ["my_custom_prop"],
			"cleanMD" : true,
			"removeProps" : ["image"],
			"excludes" : [
				"/path1/path2",
				"/path4"
			]
		}
	);

	indexer.run().then(
		function(idx){
			console.log(idx.length + " documents indexed");
			console.log("publishing to algolia...");

			algolia.saveObjects(idx, function(err, content) {
			  if(err===null){
				console.log("published!");
				algolia.deleteByQuery({
				  filters: 'indexTime < ' + idx[0].indexTime
				}, function(err) {
					if (!err) {
					    console.log('old records deleted');
					}
				});
			  }else{
			  	console.error(err);
			  }
			});

		}	
	)

Example - parse single file

	var parser = require("markdown2json").parseMD;

	parser("./content/markdownfile.md", {
		"dir" : "./content",
		"cleanMD" : true,
	}).then(
		function(jsonObj){
			console.log(jsonObj)
		}
	)