Git Product home page Git Product logo

unique-push-id's Introduction

Unique Push ID

๐Ÿ†” Generates unique, chronological, lexicographical push IDs similar to Firebase with NodeJS.

This library (with unit tests added) was directly ported from a blog post and Gist by Michael Lehenbauer of Firebase. To learn more, see "What's in a Push ID?" below.

Installation and Usage

To install, run yarn add unique-push-id or npm i unique-push-id.

Usage:

const pushId = require('unique-push-id');

const id = pushId();
console.info(id); // Will output something similar to -L9QCCdxj62CBRFCn6rF

When rapidly calling the pushId() function you can see how the IDs remain chronological and lexicographical:

const ids = [];
for (let i = 0; i < 1000; i += 1) {
  ids.push(pushId());
}
console.info(ids);
/* 
Output will look similar to:
[ 
  '-L9QCCdxj62CBRFCn6qw',
  '-L9QCCdxj62CBRFCn6qx',
  '-L9QCCdxj62CBRFCn6qy',
  '-L9QCCdxj62CBRFCn6qz',
  '-L9QCCdxj62CBRFCn6r-',
  '-L9QCCdxj62CBRFCn6r0',
  '-L9QCCdxj62CBRFCn6r1',
  '-L9QCCdxj62CBRFCn6r2',
  '-L9QCCdxj62CBRFCn6r3',
  ... more items
]
*/

Development / Testing

To develop, clone this repository and install via yarn. Tests utilize Mocha/Chai and can be ran via yarn test. The code is linted using the AirBnB coding style and is checked with eslint. Coverage can be checked via yarn coverage.

What's in a Push ID?

From Mr. Lehenbauer's blog post:

"A push ID contains 120 bits of information. The first 48 bits are a timestamp, which both reduces the chance of collision and allows consecutively created push IDs to sort chronologically. The timestamp is followed by 72 bits of randomness, which ensures that even two people creating push IDs at the exact same millisecond are extremely unlikely to generate identical IDs. One caveat to the randomness is that in order to preserve chronological ordering if a client creates multiple push IDs in the same millisecond, we just 'increment' the random bits by one."

"To turn our 120 bits of information (timestamp + randomness) into an ID that can be used as a Firebase key, we basically base64 encode it into ASCII characters, but we use a modified base64 alphabet that ensures the IDs will still sort correctly when ordered lexicographically (since Firebase keys are ordered lexicographically)."

unique-push-id's People

Contributors

zarathustra323 avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

zarathustra323

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.