a minimalistic library for inline markdown: 9 features – 10 lines of code – 0 dependencies
sometimes you want some strings (like translation strings, user's profile description, etc.) to allow for some basic styling, but without allowing/requiring HTML. this library is a bunch of regexes that help you easily add support for inline markdown features.
const TinyMarkdown = require('tinymarkdown');
const translations = {
consent: 'i confirm that am **over 18 years old** and have read the [terms of service](/terms).',
}
const html = TinyMarkdown(translations.consent, {links: true});
// 'i confirm that am <strong>over 18 years old</strong> and have read the <a href="/terms">terms of service</a>.'
foo **bar** baz → foo <strong>bar</strong> baz
foo _bar_ baz → foo <em>bar</em> baz
foo `bar` baz → foo <code>bar</code> baz
foo ~~bar~~ baz → foo <del>bar</del> baz
foo ==bar== baz → foo <mark>bar</mark> baz
foo ^bar^ baz → foo <sup>bar</sup> baz
foo ~bar~ baz → foo <sub>bar</sub> baz
⚠️ this feature needs to be explicitly enabled with a
{links: true}param
[foo](/bar) → <a href="/bar">foo</a>
external links will automatically be set to open in a new tab:
[foo](https://example.com) → <a href="https://example.com" target="_blank" rel="noopener">foo</a>
if you want to force that on local links as well, add a ! before the link:
[foo](!/bar) → <a href="/bar" target="_blank" rel="noopener">foo</a>
⚠️ this feature needs to be explicitly enabled with a
{images: true}param
 → <img src="/bar.svg" alt="foo"/>
node tests.js # run tests
node homepage.js # regenerate homepage from readme