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

bimark

v0.3.7

Published

[![npm](https://img.shields.io/npm/v/bimark?style=flat-square)](https://www.npmjs.com/package/bimark) ![license](https://img.shields.io/github/license/DiscreteTom/bimark?style=flat-square)

Downloads

19

Readme

[[BiMark]]

npm license

Auto create [[bidirectional links]] between markdown files.

Installation

For API usage:

npm install bimark

Other usages:

Usage

Basic

Create definitions in markdown documents with [[name]]:

# [[BiMark]]

BiMark is a tool to auto create [[bidirectional links]] between markdown files.

Once bidirectional links are created, you can use it to navigate between markdown files.

In the above example, BiMark and bidirectional links are definitions.

After rendering, all definitions and references will be modified to add an id, and all references will be automatically replaced with links:

# <span id="bimark">BiMark</span>

[<span id="bimark-ref-1">BiMark</span>](#bimark) is a tool to auto create <span id="bidirectional-links">bidirectional links</span> between markdown files.

Once the [<span id="bidirectional-links-ref-1">bidirectional links</span>](#bidirectional-links) is created, you can use it to navigate between markdown files.

Explicit Reference

You can create references explicitly using [[#id]] or [[@name]]:

# [[BiMark]]

[[#bimark]] is a tool to auto create [[bidirectional links]] between markdown files.

Once the [[@bidirectional links]] is created, you can use it to navigate between markdown files.

Advanced Definition

  • You can use [[name:id]] to specify the id of the definition.
  • If there are aliases for a definition, you can use [[name|alias1|alias2]].
    • If you don't specify the id, the name will be used to calculate the id.
# [[BiMark|bi-mark|bimark]]

# [[BiMark|bi-mark|bimark:bimark]]

Escaped Reference

You can escape a reference using [[!any string]]:

# [[BiMark]]

[[!BiMark]] is a tool to auto create [[bidirectional link]] between markdown files.

The escaped reference will not check if the definition exists, not be replaced with a link, and will not be assigned with an id.

API

import { BiMark } from "bimark";

// collect from and render a single file, return the rendered content
BiMark.singleFile("# [[BiMark]]");

// collect definitions
const bm = new BiMark().collect("file1.md", content1);

// render files
bm.render("file1.md", content1);
bm.render("file2.md", content2);

// list reverse links
bm.getReverseRefs({ name: "BiMark" }); // => ['file1.md#bimark-ref-1', 'file2.md#bimark-ref-2']

BiML

You can also use BiML to parse and render HTML documents, the APIs are almost the same as BiMark.

import { BiML } from "bimark";

// collect from and render a single file, return the rendered content
BiML.singleFile("<p>[[BiML]]</p>");

// collect definitions
const bm = new BiML().collect("file1.html", content1);

// render files
bm.render("file1.html", content1);
bm.render("file2.html", content2);

// list reverse links
bm.getReverseRefs({ name: "BiML" }); // => ['file1.html#biml-ref-1', 'file2.html#biml-ref-2']

Extensibility

BiMark provides low-level classes BiDoc/BiParser for you:

  • BiDoc is the base class of BiMark/BiML. You can extend this class to parse other file types.
  • BiParser is the low level parser to parse text string to Fragment for further processing.

FAQ

  • Where can I make a definition/reference?
    • For markdown, texts(e.g. headings, paragraphs, lists).
    • For HTML, you can customize this by passing selectors options to BiML.collect/render.
  • How to solve the problem of duplicate ids?
    • You can use [[name:id]] to specify the id of a definition.
  • What characters are allowed in the name/alias of a definition?
    • Regex: [^$&+,/:;=?!@"'<>#%{}|\\^~[\]`\n\r].
    • Yes, spaces are allowed.
    • Language specific characters are allowed, e.g. [[中文]] is allowed.
  • What characters are allowed in the id of a definition?
    • Regex: [^$&+,/:;=?!@ "'<>#%{}|\\^~[\]`\n\r].
    • No, spaces are not allowed.
  • What characters are allowed in the escaped reference?
    • Regex: .*?

CHANGELOG