maylily
distributable, serverless, and customizable unique ID generator based on Snowflake
Last updated 5 months ago by shimataro .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install maylily 
SYNC missed versions from official npm registry.

MayLily

Build Status (Windows) Build Status (macOS) Build Status (Linux) Code Coverage Release Node.js version License

NPM

distributable, serverless, and customizable unique ID generator based on Snowflake

Features

  • distributable / scalable
  • no external servers required
  • customizable
  • supports 2-36 radix
  • supports multiple precision integer
  • supports CommonJS, ES Modules, TypeScript

How to install

Install by npm.

npm install -S maylily

How to use

No external servers needed. Just import and call maylily()!

JavaScript

Traditional syntax. This code will run on most JavaScript engine.

var maylily = require("maylily");

(function() {
    // returns a Promise object
    maylily()
        .then(function(id) {
            // do something...
        })
        .catch(function(err) {
            // err is instance of Error
        });
}();

ECMAScript 7

Modern syntax. Async/await syntax is easy to read

const maylily = require("maylily");

(async() => { // async syntax / arrow function
    try {
        const id = await maylily(); // await syntax
        // do something...
    }
    catch(err) {
        // err is instance of Error
    }
})();

ES Modules / Babel / TypeScript (import, async/await)

VERY modern syntax!

import maylily from "maylily"; // import syntax

(async() => {
    try {
        const id = await maylily();
        // do something...
    }
    catch(err) {
        // err is instance of Error
    }
})();

How to customize

name description default
radix radix of generated ID (2-36) 10
timeBase base time in unixtime(millisec) 946684800000 (2000-01-01T00:00:00Z)
machineId identifier of machine; must be unique in service 0
machineBits required bits to represent machineId 3
generatorId identifier of generator; must be unique in machine process ID
generatorBits required bits to represent generatorId 10
sequenceBits required bits to represent sequence 8

Generated value is stringified multiple precision integer (in specified radix).

 000001011100000101111010101110101010111101 001 1101101010 00000110
|------------------------------------------|                         current time from timeBase in millisec
                                           |---|                     machineId (uses machineBits bits)
                                               |----------|          generatorId (uses generatorBits bits)
                                                          |--------| sequence number (uses sequenceBits bits)

example:

// keeps options until next change
maylily({
    timeBase: Date.parse("2017-01-01T00:00:00Z"),   // if your service starts in 2017, this is enough.
    machineBits: 1                                  // if required number machines are up to 2, this is enough.
});

Changelog

See CHANGELOG.md.

Current Tags

  • 2.2.0                                ...           latest (5 months ago)

5 Versions

  • 2.2.0                                ...           5 months ago
  • 2.1.2                                ...           a year ago
  • 2.1.1                                ...           a year ago
  • 2.0.0                                ...           2 years ago
  • 1.0.0                                ...           3 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 1
Last Month 2
Dependencies (8)
Dev Dependencies (10)
Dependents (0)
None

Copyright 2014 - 2017 © taobao.org |