npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

hubdown

v3.0.0

Published

Convert markdown to GitHub-style HTML using a common set of remark plugins

Downloads

172

Readme

hubdown

CircleCI build status

Convert markdown to GitHub-style HTML using a common set of remark and rehype plugins

Used by electron/i18n and electronjs.org.

unified processes content with syntax trees and transforms between different formats. remark and rehype are its markdown and HTML ecosystems. We use this because its performant and has a large collection of plugins. Primarily, unlike some other node markdown parsers that provide syntax highlighting capabilities, unified does not have any native C++ dependencies. This makes it easier to install and reduces the likelihood of system-dependent installation failures.

Plugins

The following remark and rehype plugins are used by hubdown:

Installation

npm install hubdown --save

Usage

hubdown exports a single function that returns a promise:

const hubdown = require('hubdown')

hubdown('I am markdown').then(doc => {
  console.log(doc)
})

The resolved promise yields an object with a content property containing the parsed HTML:

{
  content: '<p>I am markdown</p>'
}

Usage with Cache

hubdown's remark markdown parser is pretty fast, but things can start to slow down when you're processing hundreds or thousands of files. To make life easier in these situations you can use hubdown's optional cache, which stores preprocessed markdown for fast retrieval on subsequent runs.

To use the cache, bring your own level instance and supply it as an option to hubdown. This helps keep hubdown lean on (native) dependencies for users who don't need the cache.

const hubdown = require('hubdown')
const cache = require('level')('./my-hubdown-cache')

hubdown('I will be cached.', { cache }).then(doc => {
  console.log(doc)
})

API

hubdown(markdownString[, options])

Arguments:

  • markdownString String - (required)
  • options Object - (optional)
    • runBefore Array of remark plugins - Custom plugins to be run before the commonly used plugins listed above.
    • frontmatter Boolean - Whether or not to try to parse YML frontmatter in the file. Defaults to false.
    • cache LevelDB - An optional level instance in which to store preprocessed content. See Usage with Cache.
    • highlight - Object of rehype-highlight options.

Returns a promise. The resolved object looks like this:

{
  content: 'HTML goes here'
}

If YML frontmatter is parsed, those properties will be present on the object too:

{
  title: 'The Feminine Mystique',
  author: 'Betty Friedan',
  content: '<p>The Feminine Mystique is a book written by Betty Friedan which is widely credited with sparking the  beginning of second-wave feminism in the United States.</p>'
}

Tests

npm install
npm test

License

MIT