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 🙏

© 2026 – Pkg Stats / Ryan Hefner

hdml

v3.0.0

Published

a very simplistic HTML tag generation library for NodeJS

Readme

HDML

Table of Contents generated with DocToc

HDML

HDML is a very simplistic HTML tag generation library for NodeJS

  • escape_text: ( text ) ->—Escape text for use in HTML (by turning all occurrences of <, >, and & into &lt;, &gt;, and &amp;, respectively).

  • escape_atr_text: ( x ) ->—apply escape_text x and then replace all occurrences of single quotation mark and newline characters by &#39; and &#10;, respectively.

V1 API

  • create_tag: ( sigil, tag, atrs = null ) ->—Given a sigil to mark the role of the tag, a tagname, and an optional attributes object, return a HTML tag literal.

  • create_opening_tag: ( tag, atrs = null ) ->—Create an opening tag like <div atr='value'>.

  • create_selfclosing_tag: ( tag, atrs = null ) ->—Create an self-closing tag like <path atr='value'/> (not used in HTML5 but in SVG).

  • create_closing_tag: ( tag ) ->—Create a closing tag like </div>.

V2 API

NOTE—preliminary version; API will likely change to account for nesting tags with pair

  • open: ( tag, atrs ) ->—create an opening tag.
  • close: ( tag ) ->—create a closing tag.
  • single: ( tag, atrs ) ->—create a self-closing tag.
  • text: ( text ) ->—create a properly escaped text.
  • pair: ( tag, atrs = {}, content = '' ) ->—create a tag with content.

Compact Tagnames

  • parse_compact_tagname: ( compact_tagname ) ->
  • hdml = new Hdml { use_compact_tags: true, strict_compact_tags: true, }

<div#c432.foo.bar>...</div> => <div id=c432 class='foo bar'>...</div> <p.noindent>...</p> => <p class=noindent>...</p>

Notes

  • All tag names will be written as passed-in; this may result in illegal tag names. This may change in the future.

  • All attributes are always written with single quotes.

  • all attribute values must be strings, except for true, false, '', none and undefined, which are treated as boolean values with a shortened syntax:

    • an attribute whose value is true or the empty string is rendered with its name only
    • an attribute whose value is false, null or undefined is not rendered at all

To Do

  • [–] parse short tags?
  • [–] return objects not strings?
  • [–] see simpler interface in webscraper
  • [–] add cfg.default_tag which allows to get e.g. <div id='c1' class='bar baz'> from #c1.bar.baz
  • [–] implement recommendations, standard as explained in https://mathiasbynens.be/notes/unquoted-attribute-values

Is Done

  • [+] validate that attribute values are texts, do not implicitly convert non-text attribute values
  • [+] validate that tag names are texts, do not implicitly convert non-text values
  • [+] integrate dbay-voge/hdml2
  • [+] for practical reasons and in accordance with the HTML standard: 2.3.2 Boolean attributes, make it so that
    • an attribute whose value is true or the empty string is rendered with its name only
    • an attribute whose value is false, null or undefined is not rendered at all