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

id-shortener

v1.0.0

Published

Efficient id / url shortener backed by pluggable storage defaulting to redis.

Downloads

6

Readme

id-shortener

Efficient id / url shortener backed by pluggable storage defaulting to redis.

NPM Build Status JavaScript Style Guide

Features

  • Efficient, minimal short ID generation and long ID retrieval
  • Pluggable storage backend defaulting to redis
  • Customizable short ID character set
    • Defaults to base 60 to maximize URL compatibility
  • Customizable idempotency
    • Eg, if you shorten the same ID multiple times, you may always return the same short ID (default idempotent: true) or always returning unique IDs (idempotent: false)
  • Thorough unit tests running against an actual instance of redis via docker-compose

Install

npm install --save id-shortener

Usage

const IdShortener = require('id-shortener')

// create a redis client as the backend
const Redis = require('ioredis')
const redisClient = new Redis('redis://localhost:6379')

const shortener = new IdShortener({
  client: redisClient
})

const shortId = await shortener.shorten('test-key') => very short base60 string
const longId = await shortener.expand(shortId) // => 'test-key'

API

class IdShortener(opts)

  • opts.client - object, required client to use for storage backend
  • opts.characters - string, optional character set to use for short IDs (default base 60)
  • opts.idempotent - boolean, optional whether or not shorten should be idempotent (default true)

redis-specific

  • opts.shortToLongKey - string, optional key to use for short to long mapping (default 'id-shortener:short-to-long')
  • opts.longToShortKey - string, optional key to use for long to short mapping (default 'id-shortener:long-to-short')
    • Note this key is only used if idempotent is true
  • opts.sequenceKey - string, optional key to use for atomic id counter (default 'id-shortener:sequence')

shorten

Returns a shortened version of the given long ID. Note this method's semantics are highly affected by the idempotent option that was passed to the IdShortener constructor.

IdShortener.shorten(string longId) => Promise<string shortId>

expand

Returns the long version of the given short ID. Note that this method will return undefined if the shortId is not found.

IdShortener.expand(string shortId) => Promise<string longId>

License

MIT © Travis Fischer

Why??? 💩

Building a URL shortener is a very, very common interview question with lots of great existing example solutions.

That being said, I couldn't find an up-to-date, open source, NodeJS module that fit my project's needs.

With this in mind, the goal of this module is not to be a perfect URL shortening solution (xkcd), as every use case will inevitably have unique differences, but rather to provide a solid example implementation for other Node devs. ✌️